home *** CD-ROM | disk | FTP | other *** search
- /* ************************************************************************
- * file: act.informative.c , Implementation of commands. Part of DIKUMUD *
- * Usage : Informative commands. *
- * Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
- ************************************************************************* */
-
- #include <stdio.h>
- #include <string.h>
- #include <ctype.h>
- #include <time.h>
-
- #include "protos.h"
-
- /* extern variables */
- #if HASH
- extern struct hash_header room_db;
- #else
- extern struct room_data *room_db;
- #endif
- extern struct descriptor_data *descriptor_list;
- extern struct char_data *character_list;
- extern struct obj_data *object_list;
-
- extern int top_of_world;
- extern int top_of_zone_table;
- extern int top_of_mobt;
- extern int top_of_objt;
- extern int top_of_p_table;
-
- extern char credits[MAX_STRING_LENGTH];
- extern char news[MAX_STRING_LENGTH];
- extern char info[MAX_STRING_LENGTH];
- extern char wizlist[MAX_STRING_LENGTH];
- extern char *dirs[];
- extern char *where[];
- extern char *color_liquid[];
- extern char *fullness[];
- extern const char *RaceName[];
- extern const int RacialMax[][6];
- extern char *spell_desc[];
- extern char *spells[];
- /* extern functions */
-
- struct time_info_data age(struct char_data *ch);
- void page_string(struct descriptor_data *d, char *str, int keep_internal);
- int track( struct char_data *ch, struct char_data *vict);
- int GetApprox(int num, int perc);
- int SpyCheck(struct char_data *ch);
- int remove_trap( struct char_data *ch, struct obj_data *trap);
-
- struct obj_data *get_obj_in_list_vis(struct char_data *ch, char *name,
- struct obj_data *list);
-
-
- /* intern functions */
-
- void list_obj_to_char(struct obj_data *list,struct char_data *ch, int mode,
- bool show);
- char *DescDamage(float dam);
- char *DescRatio(float f); /* theirs / yours */
- char *DamRollDesc(int a);
- char *HitRollDesc(int a);
- char *ArmorDesc(int a);
- char *AlignDesc(int a);
- char *DescAttacks(float a);
-
-
- int singular( struct obj_data *o)
- {
-
- if (IS_SET(o->obj_flags.wear_flags, ITEM_WEAR_HANDS) ||
- IS_SET(o->obj_flags.wear_flags, ITEM_WEAR_FEET) ||
- IS_SET(o->obj_flags.wear_flags, ITEM_WEAR_LEGS) ||
- IS_SET(o->obj_flags.wear_flags, ITEM_WEAR_ARMS))
- return(FALSE);
- return(TRUE);
- }
-
- /* Procedures related to 'look' */
-
- void argument_split_2(char *argument, char *first_arg, char *second_arg) {
- int look_at, begin;
- begin = 0;
-
- /* Find first non blank */
- for ( ;*(argument + begin ) == ' ' ; begin++);
-
- /* Find length of first word */
- for (look_at=0; *(argument+begin+look_at) > ' ' ; look_at++)
-
- /* Make all letters lower case, AND copy them to first_arg */
- *(first_arg + look_at) = LOWER(*(argument + begin + look_at));
- *(first_arg + look_at) = '\0';
- begin += look_at;
-
- /* Find first non blank */
- for ( ;*(argument + begin ) == ' ' ; begin++);
-
- /* Find length of second word */
- for ( look_at=0; *(argument+begin+look_at)> ' ' ; look_at++)
-
- /* Make all letters lower case, AND copy them to second_arg */
- *(second_arg + look_at) = LOWER(*(argument + begin + look_at));
- *(second_arg + look_at)='\0';
- begin += look_at;
- }
-
- struct obj_data *get_object_in_equip_vis(struct char_data *ch,
- char *arg, struct obj_data *equipment[], int *j) {
-
- for ((*j) = 0; (*j) < MAX_WEAR ; (*j)++)
- if (equipment[(*j)])
- if (CAN_SEE_OBJ(ch,equipment[(*j)]))
- if (isname(arg, equipment[(*j)]->name))
- return(equipment[(*j)]);
-
- return (0);
- }
-
- char *find_ex_description(char *word, struct extra_descr_data *list)
- {
- struct extra_descr_data *i;
-
- for (i = list; i; i = i->next)
- if (isname(word,i->keyword))
- return(i->description);
-
- return(0);
- }
-
-
- void show_obj_to_char(struct obj_data *object, struct char_data *ch, int mode)
- {
- char buffer[MAX_STRING_LENGTH];
-
- buffer[0] = 0;
- if ((mode == 0) && object->description)
- strcpy(buffer, object->description);
- else if (object->short_description && ((mode == 1) ||
- (mode == 2) || (mode==3) || (mode == 4)))
- strcpy(buffer,object->short_description);
- else if (mode == 5) {
- if (object->obj_flags.type_flag == ITEM_NOTE) {
- if (object->action_description) {
- strcpy(buffer, "There is something written upon it:\n\r\n\r");
- strcat(buffer, object->action_description);
- page_string(ch->desc, buffer, 1);
- } else {
- act("It's blank.", FALSE, ch,0,0,TO_CHAR);
- }
- } else if((object->obj_flags.type_flag != ITEM_DRINKCON)) {
- strcpy(buffer,"You see nothing special..");
- } else { /* ITEM_TYPE == ITEM_DRINKCON */
- strcpy(buffer, "It looks like a drink container.");
- }
- }
-
- if (mode != 3) {
- if (IS_OBJ_STAT(object,ITEM_INVISIBLE)) {
- strcat(buffer,"(invisible)");
- }
- if (IS_OBJ_STAT(object,ITEM_ANTI_GOOD) &&
- IS_AFFECTED(ch,AFF_DETECT_EVIL)) {
- if (singular(object))
- strcat(buffer,"..It glows red");
- else
- strcat(buffer,"..They glow red");
- }
- if (IS_OBJ_STAT(object,ITEM_MAGIC) && IS_AFFECTED(ch,AFF_DETECT_MAGIC)) {
- if (singular(object))
- strcat(buffer,"..It glows blue");
- else
- strcat(buffer,"..They glow blue");
- }
- if (IS_OBJ_STAT(object,ITEM_GLOW)) {
- if (singular(object))
- strcat(buffer,"..It glows softly");
- else
- strcat(buffer,"..They glow softly");
- }
- if (IS_OBJ_STAT(object,ITEM_HUM)) {
- if (singular(object))
- strcat(buffer,"..It hums powerfully");
- else
- strcat(buffer,"..They hum with power");
- }
- if (object->obj_flags.type_flag == ITEM_ARMOR) {
- if (object->obj_flags.value[0] <
- (object->obj_flags.value[1] / 4)) {
- if (singular(object))
- strcat(buffer, "..It is falling apart");
- else
- strcat(buffer,"..They are falling apart");
- } else if (object->obj_flags.value[0] <
- (object->obj_flags.value[1] / 3)) {
- if (singular(object))
- strcat(buffer, "..It is need of much repair.");
- else
- strcat(buffer,"..They are in need of much repair");
- } else if (object->obj_flags.value[0] <
- (object->obj_flags.value[1] / 2)) {
- if (singular(object))
- strcat(buffer, "..It is in fair condition");
- else
- strcat(buffer,"..They are in fair condition");
- } else if (object->obj_flags.value[0] <
- object->obj_flags.value[1]) {
- if (singular(object))
- strcat(buffer, "..It is in good condition");
- else
- strcat(buffer,"..They are in good condition");
- } else {
- if (singular(object))
- strcat(buffer, "..It is in excellent condition");
- else
- strcat(buffer,"..They are in excellent condition");
- }
- }
- }
-
-
- strcat(buffer, "\n\r");
- page_string(ch->desc, buffer, 1);
-
- }
-
- void show_mult_obj_to_char(struct obj_data *object, struct char_data *ch, int mode, int num)
- {
- char buffer[MAX_STRING_LENGTH];
- char tmp[10];
-
- buffer[0] = 0;
- tmp[0] = 0;
-
- if ((mode == 0) && object->description)
- strcpy(buffer,object->description);
- else if (object->short_description && ((mode == 1) ||
- (mode == 2) || (mode==3) || (mode == 4)))
- strcpy(buffer,object->short_description);
- else if (mode == 5) {
- if (object->obj_flags.type_flag == ITEM_NOTE) {
- if (object->action_description) {
- strcpy(buffer, "There is something written upon it:\n\r\n\r");
- strcat(buffer, object->action_description);
- page_string(ch->desc, buffer, 1);
- } else
- act("It's blank.", FALSE, ch,0,0,TO_CHAR);
- return;
- } else if((object->obj_flags.type_flag != ITEM_DRINKCON)) {
- strcpy(buffer,"You see nothing special..");
- } else { /* ITEM_TYPE == ITEM_DRINKCON */
- strcpy(buffer, "It looks like a drink container.");
- }
- }
-
- if (mode != 3) {
- if (IS_OBJ_STAT(object,ITEM_INVISIBLE)) {
- strcat(buffer,"(invisible)");
- }
- if (IS_OBJ_STAT(object,ITEM_ANTI_GOOD) &&
- IS_AFFECTED(ch,AFF_DETECT_EVIL)) {
- strcat(buffer,"..It glows red!");
- }
- if (IS_OBJ_STAT(object,ITEM_MAGIC) && IS_AFFECTED(ch,AFF_DETECT_MAGIC)) {
- strcat(buffer,"..It glows blue!");
- }
- if (IS_OBJ_STAT(object,ITEM_GLOW)) {
- strcat(buffer,"..It has a soft glowing aura!");
- }
- if (IS_OBJ_STAT(object,ITEM_HUM)) {
- strcat(buffer,"..It emits a faint humming sound!");
- }
- }
-
- if (num>1) {
- sprintf(tmp,"[%d]", num);
- strcat(buffer, tmp);
- }
- strcat(buffer, "\n\r");
- page_string(ch->desc, buffer, 1);
- }
-
- void list_obj_in_room(struct obj_data *list, struct char_data *ch)
- {
- struct obj_data *i, *cond_ptr[50];
- int Inventory_Num = 1, num;
- int k, cond_top, cond_tot[50], found=FALSE;
- char buf[MAX_STRING_LENGTH];
-
- cond_top = 0;
-
- for (i=list; i; i = i->next_content) {
- if (CAN_SEE_OBJ(ch, i)) {
- if (cond_top< 50) {
- found = FALSE;
- for (k=0;(k<cond_top&& !found);k++) {
- if (cond_top>0) {
- if ((i->item_number == cond_ptr[k]->item_number) &&
- (i->description && cond_ptr[k]->description &&
- !strcmp(i->description,cond_ptr[k]->description))){
- cond_tot[k] += 1;
- found=TRUE;
- }
- }
- }
- if (!found) {
- cond_ptr[cond_top] = i;
- cond_tot[cond_top] = 1;
- cond_top+=1;
- }
- } else {
- if ((ITEM_TYPE(i) == ITEM_TRAP) || (GET_TRAP_CHARGES(i) > 0)) {
- num = number(1,100);
- if (ch->skills && num < (ch->skills[SKILL_FIND_TRAP].learned/2)) {
- show_obj_to_char(i,ch,0);
- }
- } else {
- show_obj_to_char(i,ch,0);
- }
- }
- }
- }
-
- if (cond_top) {
- for (k=0; k<cond_top; k++) {
- if ((ITEM_TYPE(cond_ptr[k]) == ITEM_TRAP) &&
- (GET_TRAP_CHARGES(cond_ptr[k]) > 0)) {
- num = number(1,101);
- if (ch->skills && (num < (ch->skills[SKILL_FIND_TRAP].learned/2)))
- if (cond_tot[k] > 1) {
- sprintf(buf,"[%2d] ",Inventory_Num++);
- send_to_char(buf,ch);
- show_mult_obj_to_char(cond_ptr[k],ch,0,cond_tot[k]);
- } else {
- show_obj_to_char(cond_ptr[k],ch,0);
- }
- } else {
- if (cond_tot[k] > 1) {
- sprintf(buf,"[%2d] ",Inventory_Num++);
- send_to_char(buf,ch);
- show_mult_obj_to_char(cond_ptr[k],ch,0,cond_tot[k]);
- } else {
- show_obj_to_char(cond_ptr[k],ch,0);
- }
- }
- }
- }
- }
-
- void list_obj_in_heap(struct obj_data *list, struct char_data *ch)
- {
- struct obj_data *i, *cond_ptr[50];
- int k, cond_top, cond_tot[50], found=FALSE;
- char buf[MAX_STRING_LENGTH];
-
- int Num_Inventory = 1;
- cond_top = 0;
-
- for (i=list; i; i = i->next_content) {
- if (CAN_SEE_OBJ(ch, i)) {
- if (cond_top< 50) {
- found = FALSE;
- for (k=0;(k<cond_top&& !found);k++) {
- if (cond_top>0) {
- if ((i->item_number == cond_ptr[k]->item_number) &&
- (i->short_description && cond_ptr[k]->short_description &&
- (!strcmp(i->short_description,cond_ptr[k]->short_description)))){
- cond_tot[k] += 1;
- found=TRUE;
- }
- }
- }
- if (!found) {
- cond_ptr[cond_top] = i;
- cond_tot[cond_top] = 1;
- cond_top+=1;
- }
- } else {
- show_obj_to_char(i,ch,2);
- }
- }
- }
-
- if (cond_top) {
- for (k=0; k<cond_top; k++) {
- sprintf(buf,"[%2d] ",Num_Inventory++);
- send_to_char(buf,ch);
- if (cond_tot[k] > 1) {
- Num_Inventory += cond_tot[k] - 1;
- show_mult_obj_to_char(cond_ptr[k],ch,2,cond_tot[k]);
- } else {
- show_obj_to_char(cond_ptr[k],ch,2);
- }
- }
- }
- }
-
- void list_obj_to_char(struct obj_data *list,struct char_data *ch, int mode,
- bool show) {
- char buf[MAX_STRING_LENGTH];
- int Num_In_Bag = 1;
- struct obj_data *i;
- bool found;
-
- found = FALSE;
- for ( i = list ; i ; i = i->next_content ) {
- if (CAN_SEE_OBJ(ch,i)) {
- sprintf(buf,"[%2d] ",Num_In_Bag++);
- send_to_char(buf,ch);
- show_obj_to_char(i, ch, mode);
- found = TRUE;
- }
- }
- if ((! found) && (show)) send_to_char("Nothing\n\r", ch);
- }
-
-
-
- void show_char_to_char(struct char_data *i, struct char_data *ch, int mode)
- {
- char buffer[MAX_STRING_LENGTH];
- int j, found, percent, otype;
- struct obj_data *tmp_obj;
- struct affected_type *aff;
-
-
- if (mode == 0) {
-
- if (IS_AFFECTED(i, AFF_HIDE) || !CAN_SEE(ch,i)) {
- if (IS_AFFECTED(ch, AFF_SENSE_LIFE))
- send_to_char("You sense a hidden life form in the room.\n\r", ch);
- return;
- }
-
- if (!(i->player.long_descr)||(GET_POS(i) != i->specials.default_pos)){
- /* A player char or a mobile without long descr, or not in default pos.*/
- if (!IS_NPC(i)) {
- strcpy(buffer,GET_NAME(i));
- strcat(buffer," ");
- if (GET_TITLE(i))
- strcat(buffer,GET_TITLE(i));
- } else {
- strcpy(buffer, i->player.short_descr);
- CAP(buffer);
- }
-
- if ( IS_AFFECTED(i,AFF_INVISIBLE) || i->invis_level == LOW_IMMORTAL)
- strcat(buffer," (invisible)");
- if ( IS_AFFECTED(i,AFF_CHARM))
- strcat(buffer," (pet)");
-
- switch(GET_POS(i)) {
- case POSITION_STUNNED :
- strcat(buffer," is lying here, stunned."); break;
- case POSITION_INCAP :
- strcat(buffer," is lying here, incapacitated."); break;
- case POSITION_MORTALLYW:
- strcat(buffer," is lying here, mortally wounded."); break;
- case POSITION_DEAD :
- strcat(buffer," is lying here, dead."); break;
- case POSITION_MOUNTED:
- if (MOUNTED(i)) {
- strcat(buffer, " is here, riding ");
- strcat(buffer, MOUNTED(i)->player.short_descr);
- } else {
- strcat(buffer, " is standing here.");
- }
- break;
- case POSITION_STANDING :
- if (!IS_AFFECTED(i, AFF_FLYING)) {
- if (real_roomp(i->in_room)->sector_type == SECT_WATER_NOSWIM)
- strcat(buffer, "is floating here.");
- else
- strcat(buffer," is standing here.");
- } else {
- strcat(buffer," is flying about.");
- }
- break;
- case POSITION_SITTING :
- if (real_roomp(i->in_room)->sector_type == SECT_WATER_NOSWIM)
- strcat(buffer, "is floating here.");
- else
- strcat(buffer," is sitting here."); break;
- case POSITION_RESTING :
- if (real_roomp(i->in_room)->sector_type == SECT_WATER_NOSWIM)
- strcat(buffer, "is resting here in the water.");
- else
- strcat(buffer," is resting here."); break;
- case POSITION_SLEEPING :
- if (real_roomp(i->in_room)->sector_type == SECT_WATER_NOSWIM)
- strcat(buffer, "is sleeping here in the water.");
- else
- strcat(buffer," is sleeping here."); break;
- case POSITION_FIGHTING :
- if (i->specials.fighting) {
-
- strcat(buffer," is here, fighting ");
- if (i->specials.fighting == ch)
- strcat(buffer," YOU!");
- else {
- if (i->in_room == i->specials.fighting->in_room)
- if (IS_NPC(i->specials.fighting))
- strcat(buffer, i->specials.fighting->player.short_descr);
- else
- strcat(buffer, GET_NAME(i->specials.fighting));
- else
- strcat(buffer, "someone who has already left.");
- }
- } else /* NIL fighting pointer */
- strcat(buffer," is here struggling with thin air.");
- break;
- default : strcat(buffer," is floating here."); break;
- }
- if (IS_AFFECTED(ch, AFF_DETECT_EVIL)) {
- if (IS_EVIL(i))
- strcat(buffer, " (Red Aura)");
- }
-
- strcat(buffer,"\n\r");
- send_to_char(buffer, ch);
- } else { /* npc with long */
-
- if (IS_AFFECTED(i,AFF_INVISIBLE))
- strcpy(buffer,"*");
- else
- *buffer = '\0';
-
- if (IS_AFFECTED(ch, AFF_DETECT_EVIL)) {
- if (IS_EVIL(i))
- strcat(buffer, " (Red Aura)");
- }
-
- strcat(buffer, i->player.long_descr);
-
- send_to_char(buffer, ch);
- }
-
- if (IS_AFFECTED(i,AFF_SANCTUARY))
- act("$n glows with a bright light!", FALSE, i, 0, ch, TO_VICT);
- if (IS_AFFECTED(i,AFF_GROWTH))
- act("$n is extremely large!", FALSE, i, 0, ch, TO_VICT);
- if (IS_AFFECTED(i, AFF_FIRESHIELD))
- act("$n is surrounded by burning flames!", FALSE, i, 0, ch, TO_VICT);
-
- } else if (mode == 1) {
-
- if (i->player.description)
- send_to_char(i->player.description, ch);
- else {
- act("You see nothing special about $m.", FALSE, i, 0, ch, TO_VICT);
- }
-
- /*
- personal descriptions.
- */
-
- if (IS_PC(i)) {
- sprintf(buffer, "$n is %s", RaceName[GET_RACE(i)]);
- act(buffer, FALSE, i, 0, ch, TO_VICT);
- }
-
- if (MOUNTED(i)) {
- sprintf(buffer,"$n is mounted on %s", MOUNTED(i)->player.short_descr);
- act(buffer, FALSE, i, 0, ch, TO_VICT);
- }
-
- if (RIDDEN(i)) {
- sprintf(buffer,"$n is ridden by %s", IS_NPC(RIDDEN(i))?RIDDEN(i)->player.short_descr:GET_NAME(RIDDEN(i)));
- act(buffer, FALSE, i, 0, ch, TO_VICT);
- }
-
- /* Show a character to another */
-
- if (GET_MAX_HIT(i) > 0)
- percent = (100*GET_HIT(i))/GET_MAX_HIT(i);
- else
- percent = -1; /* How could MAX_HIT be < 1?? */
-
- if (IS_NPC(i))
- strcpy(buffer, i->player.short_descr);
- else
- strcpy(buffer, GET_NAME(i));
-
- if (percent >= 100)
- strcat(buffer, " is in an excellent condition.\n\r");
- else if (percent >= 90)
- strcat(buffer, " has a few scratches.\n\r");
- else if (percent >= 75)
- strcat(buffer, " has some small wounds and many bruises.\n\r");
- else if (percent >= 50)
- strcat(buffer, " is wounded, and bleeding.\n\r");
- else if (percent >= 30)
- strcat(buffer, " has some big nasty wounds and scratches.\n\r");
- else if (percent >= 15)
- strcat(buffer, " is badly wounded\n\r");
- else if (percent >= 0)
- strcat(buffer, " is in an awful condition.\n\r");
- else
- strcat(buffer, " is bleeding badly from large, gaping wounds.\n\r");
-
- send_to_char(buffer, ch);
-
-
- /*
- spell_descriptions, etc.
- */
- for (aff = i->affected; aff; aff = aff->next) {
- if (aff->type < 170) {
- otype = -1;
- if (spell_desc[aff->type] && *spell_desc[aff->type])
- if (aff->type != otype) {
- act(spell_desc[aff->type], FALSE, i, 0, ch, TO_VICT);
- otype = aff->type;
- }
- }
- }
-
-
- found = FALSE;
- for (j=0; j< MAX_WEAR; j++) {
- if (i->equipment[j]) {
- if (CAN_SEE_OBJ(ch,i->equipment[j])) {
- found = TRUE;
- }
- }
- }
- if (found) {
- act("\n\r$n is using:", FALSE, i, 0, ch, TO_VICT);
- for (j=0; j< MAX_WEAR; j++) {
- if (i->equipment[j]) {
- if (CAN_SEE_OBJ(ch,i->equipment[j])) {
- send_to_char(where[j],ch);
- show_obj_to_char(i->equipment[j],ch,1);
- }
- }
- }
- }
- if (HasClass(ch, CLASS_THIEF) && (ch != i) &&
- (!IS_IMMORTAL(ch))){
- found = FALSE;
- send_to_char
- ("\n\rYou attempt to peek at the inventory:\n\r", ch);
- for(tmp_obj = i->carrying; tmp_obj;
- tmp_obj = tmp_obj->next_content) {
- if (CAN_SEE_OBJ(ch, tmp_obj) &&
- (number(0,MAX_MORT) < GetMaxLevel(ch))) {
- show_obj_to_char(tmp_obj, ch, 1);
- found = TRUE;
- }
- }
- if (!found)
- send_to_char("You can't see anything.\n\r", ch);
- } else if (IS_IMMORTAL(ch)) {
- send_to_char("Inventory:\n\r",ch);
- for(tmp_obj = i->carrying; tmp_obj;
- tmp_obj = tmp_obj->next_content) {
- show_obj_to_char(tmp_obj, ch, 1);
- found = TRUE;
- }
- if (!found) {
- send_to_char("Nothing\n\r",ch);
- }
- }
-
- } else if (mode == 2) {
-
- /* Lists inventory */
- act("$n is carrying:", FALSE, i, 0, ch, TO_VICT);
- list_obj_in_heap(i->carrying,ch);
- }
- }
-
-
- void show_mult_char_to_char(struct char_data *i, struct char_data *ch, int mode, int num)
- {
- char buffer[MAX_STRING_LENGTH];
- char tmp[10];
- int j, found, percent;
- struct obj_data *tmp_obj;
-
- if (mode == 0) {
- if (IS_AFFECTED(i, AFF_HIDE) || !CAN_SEE(ch,i)) {
- if (IS_AFFECTED(ch, AFF_SENSE_LIFE))
- if (num==1)
- send_to_char("You sense a hidden life form in the room.\n\r", ch);
- else
- send_to_char("You sense hidden life forma in the room.\n\r", ch);
- return;
- }
-
- if (!(i->player.long_descr)||(GET_POS(i) != i->specials.default_pos)){
- /* A player char or a mobile without long descr, or not in default pos. */
- if (!IS_NPC(i)) {
- strcpy(buffer,GET_NAME(i));
- strcat(buffer," ");
- if (GET_TITLE(i))
- strcat(buffer,GET_TITLE(i));
- } else {
- strcpy(buffer, i->player.short_descr);
- CAP(buffer);
- }
-
- if ( IS_AFFECTED(i,AFF_INVISIBLE))
- strcat(buffer," (invisible)");
- if ( IS_AFFECTED(i,AFF_CHARM))
- strcat(buffer," (pet)");
-
- switch(GET_POS(i)) {
- case POSITION_STUNNED :
- strcat(buffer," is lying here, stunned."); break;
- case POSITION_INCAP :
- strcat(buffer," is lying here, incapacitated."); break;
- case POSITION_MORTALLYW:
- strcat(buffer," is lying here, mortally wounded."); break;
- case POSITION_DEAD :
- strcat(buffer," is lying here, dead."); break;
- case POSITION_STANDING :
- if (!IS_AFFECTED(i, AFF_FLYING)) {
- if (real_roomp(i->in_room)->sector_type == SECT_WATER_NOSWIM)
- strcat(buffer, "is floating here.");
- else
- strcat(buffer," is standing here.");
- } else {
- strcat(buffer," is flying about.");
- }
- break;
- case POSITION_SITTING :
- if (real_roomp(i->in_room)->sector_type == SECT_WATER_NOSWIM)
- strcat(buffer, "is floating here.");
- else
- strcat(buffer," is sitting here."); break;
- case POSITION_RESTING :
- if (real_roomp(i->in_room)->sector_type == SECT_WATER_NOSWIM)
- strcat(buffer, "is resting here in the water");
- else
- strcat(buffer," is resting here."); break;
- case POSITION_SLEEPING :
- if (real_roomp(i->in_room)->sector_type == SECT_WATER_NOSWIM)
- strcat(buffer, "is sleeping here in the water");
- else
- strcat(buffer," is sleeping here."); break;
- case POSITION_FIGHTING :
- if (i->specials.fighting) {
-
- strcat(buffer," is here, fighting ");
- if (i->specials.fighting == ch)
- strcat(buffer," YOU!");
- else {
- if (i->in_room == i->specials.fighting->in_room)
- if (IS_NPC(i->specials.fighting))
- strcat(buffer, i->specials.fighting->player.short_descr);
- else
- strcat(buffer, GET_NAME(i->specials.fighting));
- else
- strcat(buffer, "someone who has already left.");
- }
- } else /* NIL fighting pointer */
- strcat(buffer," is here struggling with thin air.");
- break;
- default : strcat(buffer," is floating here."); break;
- }
- if (IS_AFFECTED(ch, AFF_DETECT_EVIL)) {
- if (IS_EVIL(i))
- strcat(buffer, " (Red Aura)");
- }
-
- if (num > 1) {
- sprintf(tmp," [%d]", num);
- strcat(buffer, tmp);
- }
- strcat(buffer,"\n\r");
- send_to_char(buffer, ch);
- } else { /* npc with long */
-
- if (IS_AFFECTED(i,AFF_INVISIBLE))
- strcpy(buffer,"*");
- else
- *buffer = '\0';
-
- if (IS_AFFECTED(ch, AFF_DETECT_EVIL)) {
- if (IS_EVIL(i))
- strcat(buffer, " (Red Aura)");
- }
-
- strcat(buffer, i->player.long_descr);
-
- /* this gets a little annoying */
-
- if (num > 1) {
- while ((buffer[strlen(buffer)-1]=='\r') ||
- (buffer[strlen(buffer)-1]=='\n') ||
- (buffer[strlen(buffer)-1]==' ')) {
- buffer[strlen(buffer)-1] = '\0';
- }
- sprintf(tmp," [%d]\n\r", num);
- strcat(buffer, tmp);
- }
-
- send_to_char(buffer, ch);
- }
-
- if (IS_AFFECTED(i,AFF_SANCTUARY))
- act("$n glows with a bright light!", FALSE, i, 0, ch, TO_VICT);
- if (IS_AFFECTED(i,AFF_GROWTH))
- act("$n is twice $s normal size!", FALSE, i, 0, ch, TO_VICT);
- if (IS_AFFECTED(i, AFF_FIRESHIELD))
- act("$n is surrounded by burning flames", FALSE, i, 0, ch, TO_VICT);
-
- } else if (mode == 1) {
-
- if (i->player.description)
- send_to_char(i->player.description, ch);
- else {
- act("You see nothing special about $m.", FALSE, i, 0, ch, TO_VICT);
- }
-
- /* Show a character to another */
-
- if (GET_MAX_HIT(i) > 0)
- percent = (100*GET_HIT(i))/GET_MAX_HIT(i);
- else
- percent = -1; /* How could MAX_HIT be < 1?? */
-
- if (IS_NPC(i))
- strcpy(buffer, i->player.short_descr);
- else
- strcpy(buffer, GET_NAME(i));
-
- if (percent >= 100)
- strcat(buffer, " is in an excellent condition.\n\r");
- else if (percent >= 90)
- strcat(buffer, " has a few scratches.\n\r");
- else if (percent >= 75)
- strcat(buffer, " has some small wounds and bruises.\n\r");
- else if (percent >= 50)
- strcat(buffer, " has quite a few wounds.\n\r");
- else if (percent >= 30)
- strcat(buffer, " has some big nasty wounds and scratches.\n\r");
- else if (percent >= 15)
- strcat(buffer, " looks pretty hurt.\n\r");
- else if (percent >= 0)
- strcat(buffer, " is in an awful condition.\n\r");
- else
- strcat(buffer, " is bleeding awfully from big wounds.\n\r");
-
- send_to_char(buffer, ch);
-
- found = FALSE;
- for (j=0; j< MAX_WEAR; j++) {
- if (i->equipment[j]) {
- if (CAN_SEE_OBJ(ch,i->equipment[j])) {
- found = TRUE;
- }
- }
- }
- if (found) {
- act("\n\r$n is using:", FALSE, i, 0, ch, TO_VICT);
- for (j=0; j< MAX_WEAR; j++) {
- if (i->equipment[j]) {
- if (CAN_SEE_OBJ(ch,i->equipment[j])) {
- send_to_char(where[j],ch);
- show_obj_to_char(i->equipment[j],ch,1);
- }
- }
- }
- }
- if ((HasClass(ch, CLASS_THIEF)) && (ch != i)) {
- found = FALSE;
- send_to_char("\n\rYou attempt to peek at the inventory:\n\r", ch);
- for(tmp_obj = i->carrying; tmp_obj; tmp_obj = tmp_obj->next_content) {
- if (CAN_SEE_OBJ(ch,tmp_obj)&&(number(0,MAX_MORT) < GetMaxLevel(ch))) {
- show_obj_to_char(tmp_obj, ch, 1);
- found = TRUE;
- }
- }
- if (!found)
- send_to_char("You can't see anything.\n\r", ch);
- }
-
- } else if (mode == 2) {
-
- /* Lists inventory */
- act("$n is carrying:", FALSE, i, 0, ch, TO_VICT);
- list_obj_in_heap(i->carrying,ch);
- }
- }
-
-
- void list_char_in_room(struct char_data *list, struct char_data *ch)
- {
- struct char_data *i, *cond_ptr[50];
- int k, cond_top, cond_tot[50], found=FALSE;
-
- cond_top = 0;
-
- for (i=list; i; i = i->next_in_room) {
- if ( (ch!=i) && (!RIDDEN(i)) && (IS_AFFECTED(ch, AFF_SENSE_LIFE) ||
- (CAN_SEE(ch,i) && !IS_AFFECTED(i, AFF_HIDE))) ) {
- if ((cond_top< 50) && !MOUNTED(i)) {
- found = FALSE;
- if (IS_NPC(i)) {
- for (k=0;(k<cond_top&& !found);k++) {
- if (cond_top>0) {
- if (i->nr == cond_ptr[k]->nr &&
- (GET_POS(i) == GET_POS(cond_ptr[k])) &&
- (i->specials.affected_by==cond_ptr[k]->specials.affected_by) &&
- (i->specials.fighting == cond_ptr[k]->specials.fighting) &&
- (i->player.short_descr && cond_ptr[k]->player.short_descr &&
- 0==strcmp(i->player.short_descr,cond_ptr[k]->player.short_descr))) {
- cond_tot[k] += 1;
- found=TRUE;
- }
- }
- }
- }
- if (!found) {
- cond_ptr[cond_top] = i;
- cond_tot[cond_top] = 1;
- cond_top+=1;
- }
- } else {
- show_char_to_char(i,ch,0);
- }
- }
- }
-
- if (cond_top) {
- for (k=0; k<cond_top; k++) {
- if (cond_tot[k] > 1) {
- show_mult_char_to_char(cond_ptr[k],ch,0,cond_tot[k]);
- } else {
- show_char_to_char(cond_ptr[k],ch,0);
- }
- }
- }
- }
-
-
- void list_char_to_char(struct char_data *list, struct char_data *ch,
- int mode) {
- struct char_data *i;
-
- for (i = list; i ; i = i->next_in_room) {
- if ( (ch!=i) && (IS_AFFECTED(ch, AFF_SENSE_LIFE) ||
- (CAN_SEE(ch,i) && !IS_AFFECTED(i, AFF_HIDE))) )
- show_char_to_char(i,ch,0);
- }
- }
-
-
-
- void do_look(struct char_data *ch, char *argument, int cmd)
- {
- char buffer[MAX_STRING_LENGTH];
- char arg1[MAX_INPUT_LENGTH];
- char arg2[MAX_INPUT_LENGTH];
- int keyword_no, res;
- int j, bits, temp;
- bool found;
- struct obj_data *tmp_object, *found_object;
- struct char_data *tmp_char;
- char *tmp_desc;
- static char *keywords[]= {
- "north",
- "east",
- "south",
- "west",
- "up",
- "down",
- "in",
- "at",
- "", /* Look at '' case */
- "room",
- "\n" };
-
- if (!ch->desc)
- return;
-
- if (GET_POS(ch) < POSITION_SLEEPING)
- send_to_char("You can't see anything but stars!\n\r", ch);
- else if (GET_POS(ch) == POSITION_SLEEPING)
- send_to_char("You can't see anything, you're sleeping!\n\r", ch);
- else if ( IS_AFFECTED(ch, AFF_BLIND) )
- send_to_char("You can't see a damn thing, you're blinded!\n\r", ch);
- else if ((IS_DARK(ch->in_room)) && (!IS_IMMORTAL(ch)) &&
- (!IS_AFFECTED(ch, AFF_TRUE_SIGHT))) {
- send_to_char("It is very dark in here...\n\r", ch);
- if (IS_AFFECTED(ch, AFF_INFRAVISION)) {
- list_char_in_room(real_roomp(ch->in_room)->people, ch);
- }
- } else {
-
- only_argument(argument, arg1);
-
- if (0==strn_cmp(arg1,"at",2) && isspace(arg1[2])) {
- only_argument(argument+3, arg2);
- keyword_no = 7;
- } else if (0==strn_cmp(arg1,"in",2) && isspace(arg1[2])) {
- only_argument(argument+3, arg2);
- keyword_no = 6;
- } else {
- keyword_no = search_block(arg1, keywords, FALSE);
- }
-
- if ((keyword_no == -1) && *arg1) {
- keyword_no = 7;
- only_argument(argument, arg2);
- }
-
-
- found = FALSE;
- tmp_object = 0;
- tmp_char = 0;
- tmp_desc = 0;
-
- switch(keyword_no) {
- /* look <dir> */
- case 0 :
- case 1 :
- case 2 :
- case 3 :
- case 4 :
- case 5 : {
- struct room_direction_data *exitp;
- exitp = EXIT(ch, keyword_no);
- if (exitp) {
- if (exitp->general_description) {
- send_to_char(exitp-> general_description, ch);
- } else {
- send_to_char("You see nothing special.\n\r", ch);
- }
-
- if (IS_SET(exitp->exit_info, EX_CLOSED) &&
- (exitp->keyword)) {
- if ((strcmp(fname(exitp->keyword), "secret")) &&
- (!IS_SET(exitp->exit_info, EX_SECRET))) {
- sprintf(buffer, "The %s is closed.\n\r",
- fname(exitp->keyword));
- send_to_char(buffer, ch);
- }
- } else {
- if (IS_SET(exitp->exit_info, EX_ISDOOR) &&
- exitp->keyword) {
- sprintf(buffer, "The %s is open.\n\r",
- fname(exitp->keyword));
- send_to_char(buffer, ch);
- }
- }
- } else {
- send_to_char("You see nothing special.\n\r", ch);
- }
- if (exitp && exitp->to_room && (!IS_SET(exitp->exit_info, EX_ISDOOR) ||
- (!IS_SET(exitp->exit_info, EX_CLOSED)))) {
- if (IS_AFFECTED(ch, AFF_SCRYING) || IS_IMMORTAL(ch)) {
- struct room_data *rp;
- sprintf(buffer,"You look %swards.\n\r", dirs[keyword_no]);
- send_to_char(buffer, ch);
-
- sprintf(buffer,"$n looks %swards.", dirs[keyword_no]);
- act(buffer, FALSE, ch, 0, 0, TO_ROOM);
-
- rp = real_roomp(exitp->to_room);
- if (!rp) {
- send_to_char("You see swirling chaos.\n\r", ch);
- } else if(exitp) {
- sprintf(buffer, "%d look", exitp->to_room);
- do_at(ch, buffer, 0);
- } else {
- send_to_char("You see nothing special.\n\r", ch);
- }
- }
- }
- }
- break;
-
- /* look 'in' */
- case 6: {
- if (*arg2) {
- /* Item carried */
- bits = generic_find(arg2, FIND_OBJ_INV | FIND_OBJ_ROOM |
- FIND_OBJ_EQUIP, ch, &tmp_char, &tmp_object);
-
- if (bits) { /* Found something */
- if (GET_ITEM_TYPE(tmp_object)== ITEM_DRINKCON) {
- if (tmp_object->obj_flags.value[1] <= 0) {
- act("It is empty.", FALSE, ch, 0, 0, TO_CHAR);
- } else {
- temp=((tmp_object->obj_flags.value[1]*3)/tmp_object->obj_flags.value[0]);
- sprintf(buffer,"It's %sfull of a %s liquid.\n\r",
- fullness[temp],color_liquid[tmp_object->obj_flags.value[2]]);
- send_to_char(buffer, ch);
- }
- } else if (GET_ITEM_TYPE(tmp_object) == ITEM_CONTAINER) {
- if (!IS_SET(tmp_object->obj_flags.value[1],CONT_CLOSED)) {
- send_to_char(fname(tmp_object->name), ch);
- switch (bits) {
- case FIND_OBJ_INV :
- send_to_char(" (carried) : \n\r", ch);
- break;
- case FIND_OBJ_ROOM :
- send_to_char(" (here) : \n\r", ch);
- break;
- case FIND_OBJ_EQUIP :
- send_to_char(" (used) : \n\r", ch);
- break;
- }
- list_obj_in_heap(tmp_object->contains, ch);
- } else
- send_to_char("It is closed.\n\r", ch);
- } else {
- send_to_char("That is not a container.\n\r", ch);
- }
- } else { /* wrong argument */
- send_to_char("You do not see that item here.\n\r", ch);
- }
- } else { /* no argument */
- send_to_char("Look in what?!\n\r", ch);
- }
- }
- break;
-
- /* look 'at' */
- case 7 : {
- if (*arg2) {
- bits = generic_find(arg2, FIND_OBJ_INV | FIND_OBJ_ROOM |
- FIND_OBJ_EQUIP | FIND_CHAR_ROOM, ch, &tmp_char, &found_object);
- if (tmp_char) {
- show_char_to_char(tmp_char, ch, 1);
- if (ch != tmp_char) {
- act("$n looks at you.", TRUE, ch, 0, tmp_char, TO_VICT);
- act("$n looks at $N.", TRUE, ch, 0, tmp_char, TO_NOTVICT);
- }
- return;
- }
- /*
- Search for Extra Descriptions in room and items
- */
-
- /* Extra description in room?? */
- if (!found) {
- tmp_desc = find_ex_description(arg2,
- real_roomp(ch->in_room)->ex_description);
- if (tmp_desc) {
- page_string(ch->desc, tmp_desc, 0);
- return;
- }
- }
-
- /* extra descriptions in items */
-
- /* Equipment Used */
- if (!found) {
- for (j = 0; j< MAX_WEAR && !found; j++) {
- if (ch->equipment[j]) {
- if (CAN_SEE_OBJ(ch,ch->equipment[j])) {
- tmp_desc = find_ex_description(arg2,
- ch->equipment[j]->ex_description);
- if (tmp_desc) {
- page_string(ch->desc, tmp_desc, 1);
- found = TRUE;
- }
- }
- }
- }
- }
- /* In inventory */
- if (!found) {
- for(tmp_object = ch->carrying;
- tmp_object && !found;
- tmp_object = tmp_object->next_content) {
- if CAN_SEE_OBJ(ch, tmp_object) {
- tmp_desc = find_ex_description(arg2,
- tmp_object->ex_description);
- if (tmp_desc) {
- page_string(ch->desc, tmp_desc, 1);
- found = TRUE;
- }
- }
- }
- }
- /* Object In room */
-
- if (!found) {
- for(tmp_object = real_roomp(ch->in_room)->contents;
- tmp_object && !found;
- tmp_object = tmp_object->next_content) {
- if CAN_SEE_OBJ(ch, tmp_object) {
- tmp_desc = find_ex_description(arg2,
- tmp_object->ex_description);
- if (tmp_desc) {
- page_string(ch->desc, tmp_desc, 1);
- found = TRUE;
- }
- }
- }
- }
- /* wrong argument */
- if (bits) { /* If an object was found */
- if (!found)
- show_obj_to_char(found_object, ch, 5);
- /* Show no-description */
- else
- show_obj_to_char(found_object, ch, 6);
- /* Find hum, glow etc */
- } else if (!found) {
- send_to_char("You do not see that here.\n\r", ch);
- }
- } else {
- /* no argument */
- send_to_char("Look at what?\n\r", ch);
- }
- }
- break;
-
- /* look '' */
- case 8 : {
- send_to_char(real_roomp(ch->in_room)->name, ch);
- send_to_char("\n\r", ch);
- if (!IS_SET(ch->specials.act, PLR_BRIEF))
- send_to_char(real_roomp(ch->in_room)->description, ch);
-
- if (!IS_NPC(ch)) {
- if (IS_SET(ch->specials.act, PLR_HUNTING)) {
- if (ch->specials.hunting) {
- res = track(ch, ch->specials.hunting);
- if (!res) {
- ch->specials.hunting = 0;
- ch->hunt_dist = 0;
- REMOVE_BIT(ch->specials.act, PLR_HUNTING);
- }
- } else {
- ch->hunt_dist = 0;
- REMOVE_BIT(ch->specials.act, PLR_HUNTING);
- }
- }
- } else {
- if (IS_SET(ch->specials.act, ACT_HUNTING)) {
- if (ch->specials.hunting) {
- res = track(ch, ch->specials.hunting);
- if (!res) {
- ch->specials.hunting = 0;
- ch->hunt_dist = 0;
- REMOVE_BIT(ch->specials.act, ACT_HUNTING);
- }
- } else {
- ch->hunt_dist = 0;
- REMOVE_BIT(ch->specials.act, ACT_HUNTING);
- }
- }
- }
-
- list_obj_in_room(real_roomp(ch->in_room)->contents, ch);
- list_char_in_room(real_roomp(ch->in_room)->people, ch);
-
- }
- break;
-
- /* wrong arg */
- case -1 :
- send_to_char("Sorry, I didn't understand that!\n\r", ch);
- break;
-
- /* look 'room' */
- case 9 : {
-
- send_to_char(real_roomp(ch->in_room)->name, ch);
- send_to_char("\n\r", ch);
- send_to_char(real_roomp(ch->in_room)->description, ch);
-
- if (!IS_NPC(ch)) {
- if (IS_SET(ch->specials.act, PLR_HUNTING)) {
- if (ch->specials.hunting) {
- res = track(ch, ch->specials.hunting);
- if (!res) {
- ch->specials.hunting = 0;
- ch->hunt_dist = 0;
- REMOVE_BIT(ch->specials.act, PLR_HUNTING);
- }
- } else {
- ch->hunt_dist = 0;
- REMOVE_BIT(ch->specials.act, PLR_HUNTING);
- }
- }
- } else {
- if (IS_SET(ch->specials.act, ACT_HUNTING)) {
- if (ch->specials.hunting) {
- res = track(ch, ch->specials.hunting);
- if (!res) {
- ch->specials.hunting = 0;
- ch->hunt_dist = 0;
- REMOVE_BIT(ch->specials.act, ACT_HUNTING);
- }
- } else {
- ch->hunt_dist = 0;
- REMOVE_BIT(ch->specials.act, ACT_HUNTING);
- }
- }
- }
-
- list_obj_in_room(real_roomp(ch->in_room)->contents, ch);
- list_char_in_room(real_roomp(ch->in_room)->people, ch);
-
- }
- break;
- }
- }
- }
-
- /* end of look */
-
-
-
-
- void do_read(struct char_data *ch, char *argument, int cmd)
- {
- char buf[100];
-
- /* This is just for now - To be changed later.! */
- sprintf(buf,"at %s",argument);
- do_look(ch,buf,15);
- }
-
-
-
- void do_examine(struct char_data *ch, char *argument, int cmd)
- {
- char name[100], buf[100];
- struct char_data *tmp_char;
- struct obj_data *tmp_object;
-
- sprintf(buf,"at %s",argument);
- do_look(ch,buf,15);
-
- one_argument(argument, name);
-
- if (!*name) {
- send_to_char("Examine what?\n\r", ch);
- return;
- }
-
- generic_find(name, FIND_OBJ_INV | FIND_OBJ_ROOM |
- FIND_OBJ_EQUIP, ch, &tmp_char, &tmp_object);
-
- if (tmp_object) {
- if ((GET_ITEM_TYPE(tmp_object)==ITEM_DRINKCON) ||
- (GET_ITEM_TYPE(tmp_object)==ITEM_CONTAINER)) {
- send_to_char("When you look inside, you see:\n\r", ch);
- sprintf(buf,"in %s",argument);
- do_look(ch,buf,15);
- }
- }
- }
-
- #if 0
- void do_exits(struct char_data *ch, char *argument, int cmd)
- {
- int door;
- char buf[1000];
- struct room_direction_data *exitdata;
- extern char *exits[];
-
- *buf = '\0';
-
- for (door = 0; door <= 5; door++) {
- exitdata = EXIT(ch,door);
- if (exitdata) {
- if (!real_roomp(exitdata->to_room)) {
- /* don't print unless immortal */
- if (IS_IMMORTAL(ch)) {
- sprintf(buf + strlen(buf), "%s - swirling chaos of #%d\n\r",
- exits[door], exitdata->to_room);
- }
- } else if (exitdata->to_room != NOWHERE &&
- (!IS_SET(exitdata->exit_info, EX_CLOSED) ||
- IS_IMMORTAL(ch))) {
- if (IS_DARK(exitdata->to_room))
- sprintf(buf + strlen(buf), "%s - Too dark to tell", exits[door]);
- else
- sprintf(buf + strlen(buf), "%s - %s", exits[door],
- real_roomp(exitdata->to_room)->name);
- if (IS_SET(exitdata->exit_info, EX_CLOSED))
- strcat(buf, " (closed)");
- strcat(buf, "\n\r");
- }
- }
- }
-
- send_to_char("Obvious exits:\n\r", ch);
-
- if (*buf)
- send_to_char(buf, ch);
- else
- send_to_char("None.\n\r", ch);
- }
- #else
-
- /* Gecko's spiffy enhancement to do_exits() from act.info.c */
-
- void do_exits(struct char_data *ch, char *argument, int cmd)
- {
- /* NOTE: Input var 'cmd' is not used. */
- int door;
- char buf[1000];
- struct room_direction_data *exitdata;
- extern char *exits[];
-
- *buf = '\0';
-
- for (door = 0; door <= 5; door++) {
- exitdata = EXIT(ch,door);
- if (exitdata) {
- if (!real_roomp(exitdata->to_room)) {
- /* don't print unless immortal */
- if (IS_IMMORTAL(ch)) {
- sprintf(buf + strlen(buf), "%s - swirling chaos of #%d\n\r",
- exits[door], exitdata->to_room);
- }
- }
- else if (exitdata->to_room != NOWHERE) {
- if (IS_IMMORTAL(ch)){
- sprintf(buf + strlen(buf), "%s - %s", exits[door],
- real_roomp(exitdata->to_room)->name);
- if(IS_SET(exitdata->exit_info, EX_CLOSED))
- strcat(buf, " (closed)");
- if(IS_DARK(exitdata->to_room))
- strcat(buf, " (dark)");
- sprintf(buf + strlen(buf), " #%d\n\r", exitdata->to_room);
- }
- else if (!IS_SET(exitdata->exit_info, EX_CLOSED)) {
- if (IS_DARK(exitdata->to_room))
- sprintf(buf + strlen(buf), "%s - Too dark to tell\n\r",
- exits[door]);
- else
- sprintf(buf + strlen(buf), "%s - %s\n\r", exits[door],
- real_roomp(exitdata->to_room)->name);
- }
- }
- }
- }
-
- send_to_char("Obvious exits:\n\r", ch);
-
- if (*buf)
- send_to_char(buf, ch);
- else
- send_to_char("None.\n\r", ch);
- }
-
- #endif
-
- void do_score(struct char_data *ch, char *argument, int cmd)
- {
- struct time_info_data playing_time;
- static char buf[100], buf2[100];
- struct time_info_data my_age;
- extern const struct title_type titles[MAX_CLASS][ABS_MAX_LVL];
- extern char *RaceNames[];
-
- struct time_info_data real_time_passed(time_t t2, time_t t1);
-
- age2(ch, &my_age);
- sprintf(buf, "You are %d years old.", my_age.year);
-
-
- if ((my_age.month == 0) && (my_age.year == 0))
- strcat(buf," It's your birthday today.\n\r");
- else
- strcat(buf,"\n\r");
- send_to_char(buf, ch);
-
- sprintf(buf, "You belong to the %s race\n\r", RaceName[GET_RACE(ch)]);
- send_to_char(buf, ch);
-
- if (!IS_IMMORTAL(ch) && (!IS_NPC(ch))) {
- if (GET_COND(ch,DRUNK)>10)
- send_to_char("You are intoxicated.\n\r", ch);
- if (GET_COND(ch,FULL)<2)
- send_to_char("You are hungry...\n\r", ch);
- if (GET_COND(ch,THIRST)<2)
- send_to_char("You are thirsty...\n\r", ch);
- }
-
- sprintf(buf,
- "You have %d(%d) hit, %d(%d) mana and %d(%d) movement points.\n\r",
- GET_HIT(ch),GET_MAX_HIT(ch),
- GET_MANA(ch),GET_MAX_MANA(ch),
- GET_MOVE(ch),GET_MAX_MOVE(ch));
- send_to_char(buf,ch);
-
- sprintf(buf, "Your alignment is: %s\n\r", AlignDesc(GET_ALIGNMENT(ch)));
- send_to_char(buf,ch);
-
- sprintf(buf,"You have scored %d exp, and have %d gold coins.\n\r",
- GET_EXP(ch),GET_GOLD(ch));
- send_to_char(buf,ch);
-
- buf[0] = '\0';
- sprintf(buf, "Your levels:");
- if (HasClass(ch, CLASS_MAGIC_USER)) {
- sprintf(buf2, " M:%d", GET_LEVEL(ch, MAGE_LEVEL_IND));
- strcat(buf, buf2);
- }
- if (HasClass(ch, CLASS_CLERIC)) {
- sprintf(buf2, " C:%d", GET_LEVEL(ch, CLERIC_LEVEL_IND));
- strcat(buf, buf2);
- }
- if (HasClass(ch, CLASS_WARRIOR)) {
- sprintf(buf2, " W:%d", GET_LEVEL(ch, WARRIOR_LEVEL_IND));
- strcat(buf, buf2);
- }
- if (HasClass(ch, CLASS_THIEF)) {
- sprintf(buf2, " T:%d", GET_LEVEL(ch, THIEF_LEVEL_IND));
- strcat(buf, buf2);
- }
- if (HasClass(ch, CLASS_DRUID)) {
- sprintf(buf2, " D:%d", GET_LEVEL(ch, DRUID_LEVEL_IND));
- strcat(buf, buf2);
- }
- if (HasClass(ch, CLASS_MONK)) {
- sprintf(buf2, " K:%d", GET_LEVEL(ch, MONK_LEVEL_IND));
- strcat(buf, buf2);
- }
-
- strcat(buf, "\n\r");
- send_to_char(buf,ch);
-
- if (GET_TITLE(ch)) {
- sprintf(buf,"This ranks you as %s %s\n\r", GET_NAME(ch), GET_TITLE(ch));
- send_to_char(buf,ch);
- }
-
- playing_time = real_time_passed((time(0)-ch->player.time.logon) +
- ch->player.time.played, 0);
- sprintf(buf,"You have been playing for %d days and %d hours.\n\r",
- playing_time.day,
- playing_time.hours);
- send_to_char(buf, ch);
-
- switch(GET_POS(ch)) {
- case POSITION_DEAD :
- send_to_char("You are DEAD!\n\r", ch); break;
- case POSITION_MORTALLYW :
- send_to_char("You are mortally wounded!, you should seek help!\n\r", ch); break;
- case POSITION_INCAP :
- send_to_char("You are incapacitated, slowly fading away\n\r", ch); break;
- case POSITION_STUNNED :
- send_to_char("You are stunned! You can't move\n\r", ch); break;
- case POSITION_SLEEPING :
- send_to_char("You are sleeping.\n\r",ch); break;
- case POSITION_RESTING :
- send_to_char("You are resting.\n\r",ch); break;
- case POSITION_SITTING :
- send_to_char("You are sitting.\n\r",ch); break;
- case POSITION_FIGHTING :
- if (ch->specials.fighting)
- act("You are fighting $N.\n\r", FALSE, ch, 0,
- ch->specials.fighting, TO_CHAR);
- else
- send_to_char("You are fighting thin air.\n\r", ch);
- break;
- case POSITION_STANDING :
- send_to_char("You are standing.\n\r",ch); break;
- case POSITION_MOUNTED:
- if (MOUNTED(ch)) {
- send_to_char("You are riding on ",ch);
- send_to_char(MOUNTED(ch)->player.short_descr, ch);
- send_to_char("\n\r", ch);
- } else {
- send_to_char("You are standing.\n\r",ch); break;
- }
- break;
- default :
- send_to_char("You are floating.\n\r",ch); break;
- }
-
- }
-
-
- void do_time(struct char_data *ch, char *argument, int cmd)
- {
- char buf[100], *suf;
- int weekday, day;
- extern struct time_info_data time_info;
- extern const char *weekdays[];
- extern const char *month_name[];
-
- sprintf(buf, "It is %d o'clock %s, on ",
- ((time_info.hours % 12 == 0) ? 12 : ((time_info.hours) % 12)),
- ((time_info.hours >= 12) ? "pm" : "am") );
-
- weekday = ((35*time_info.month)+time_info.day+1) % 7;/* 35 days in a month */
-
- strcat(buf,weekdays[weekday]);
- strcat(buf,"\n\r");
- send_to_char(buf,ch);
-
- day = time_info.day + 1; /* day in [1..35] */
-
- if (day == 1)
- suf = "st";
- else if (day == 2)
- suf = "nd";
- else if (day == 3)
- suf = "rd";
- else if (day < 20)
- suf = "th";
- else if ((day % 10) == 1)
- suf = "st";
- else if ((day % 10) == 2)
- suf = "nd";
- else if ((day % 10) == 3)
- suf = "rd";
- else
- suf = "th";
-
- sprintf(buf, "The %d%s Day of the %s, Year %d.\n\r",
- day,
- suf,
- month_name[time_info.month],
- time_info.year);
-
- send_to_char(buf,ch);
- }
-
-
- void do_weather(struct char_data *ch, char *argument, int cmd)
- {
- extern struct weather_data weather_info;
- static char buf[100];
- char static *sky_look[4]= {
- "cloudless",
- "cloudy",
- "rainy",
- "lit by flashes of lightning"};
-
- if (OUTSIDE(ch)) {
- sprintf(buf,
- "The sky is %s and %s.\n\r",
- sky_look[weather_info.sky],
- (weather_info.change >=0 ? "you feel a warm wind from south" :
- "your foot tells you bad weather is due"));
- send_to_char(buf,ch);
- } else
- send_to_char("You have no feeling about the weather at all.\n\r", ch);
- }
-
-
- void do_help(struct char_data *ch, char *argument, int cmd)
- {
-
- extern int top_of_helpt;
- extern struct help_index_element *help_index;
- extern FILE *help_fl;
- extern char help[MAX_STRING_LENGTH];
-
- int chk, bot, top, mid, minlen;
- char buf[MAX_STRING_LENGTH], buffer[MAX_STRING_LENGTH];
-
-
- if (!ch->desc)
- return;
-
- for(;isspace(*argument); argument++) ;
-
-
- if (*argument)
- {
- if (!help_index) {
- send_to_char("No help available.\n\r", ch);
- return;
- }
- bot = 0;
- top = top_of_helpt;
-
- for (;;)
- {
- mid = (bot + top) / 2;
- minlen = strlen(argument);
-
- if (!(chk = strn_cmp(argument, help_index[mid].keyword, minlen)))
- {
- fseek(help_fl, help_index[mid].pos, 0);
- *buffer = '\0';
- for (;;) {
- fgets(buf, 80, help_fl);
- if (*buf == '#')
- break;
- if (strlen(buf)+strlen(buffer) > MAX_STRING_LENGTH-2)
- break;
- strcat(buffer, buf);
- strcat(buffer, "\r");
- }
- page_string(ch->desc, buffer, 1);
- return;
- } else if (bot >= top) {
- send_to_char("There is no help on that word.\n\r", ch);
- return;
- }
- else if (chk > 0)
- bot = ++mid;
- else
- top = --mid;
- }
- return;
- }
-
-
- send_to_char(help, ch);
-
- }
-
-
- void do_wizhelp(struct char_data *ch, char *arg, int cmd)
- {
- char buf[1000];
- int i, j = 1;
- NODE *n;
- extern struct radix_list radix_head[];
-
- if(IS_NPC(ch))
- return;
-
- sprintf(buf, "Wizard Commands Available To You:\n\r\n\r");
-
- for(i = 0; i < 26; i++) {
- n = radix_head[i].next;
- while(n) {
- if(n->min_level <= GetMaxLevel(ch) && n->min_level >= LOW_IMMORTAL) {
- sprintf((buf + strlen(buf)), "%-10s", n->name);
- if(!(j % 7))
- sprintf((buf + strlen(buf)), "\n\r");
- j++;
- }
- n = n->next;
- }
- }
-
- strcat(buf, "\n\r");
-
- page_string(ch->desc, buf, 1);
- }
-
-
- void do_who(struct char_data *ch, char *argument, int cmd)
- {
- struct descriptor_data *d;
- char buf[256];
- int count, gods;
- struct char_data *person;
-
- /* check for an arg */
- only_argument(argument, buf);
- if (*buf) {
- gods = TRUE;
- } else {
- gods = FALSE;
- }
-
- if (!IS_IMMORTAL(ch) || cmd == 234) {
-
- send_to_char("Players\n\r-------\n\r", ch);
- count=0;
- for (d = descriptor_list; d; d = d->next) {
- if (!d->connected && CAN_SEE(ch, d->character) &&
- ( real_roomp((person = (d->original ? d->original:d->character)
- )->in_room)) &&
- ( real_roomp((person = (d->original ? d->original:d->character)
- )->in_room)->zone == real_roomp(ch->in_room)->zone ||
- cmd!=234 ) && (!gods || IS_IMMORTAL(d->character))) {
- count++;
- sprintf(buf, "%s %s",
- GET_NAME(person),
- (person->player.title?person->player.title:"(Null)"));
-
- if (cmd==234) { /* it's a whozone command */
- if ((!IS_AFFECTED(person, AFF_HIDE)) || (IS_IMMORTAL(ch))) {
- sprintf(buf,"%-25s - %s ", GET_NAME(person),
- real_roomp(person->in_room)->name);
- if (GetMaxLevel(ch) >= LOW_IMMORTAL)
- sprintf(buf+strlen(buf),"[%d]", person->in_room);
- }
- } else {
- sprintf(buf, "%s %s", GET_NAME(person),
- (person->player.title?person->player.title:"(null)"));
- }
- strcat(buf, "\n\r");
-
- send_to_char(buf, ch);
- }
- }
- sprintf(buf, "\n\rTotal visible players: %d\n\r", count);
- send_to_char(buf, ch);
-
- } else {
- int listed = 0, count, lcount, l, skip = FALSE;
- char arg[256], tempbuf[256];
-
- send_to_char("Players [God Version -? for Help]\n\r",ch);
- send_to_char("--------\n\r", ch);
- count=0;
- lcount=0;
- if (strlen(argument) == 0) {
- for (person = character_list; person; person = person->next) {
- if ((!IS_NPC(person)) || (IS_SET(person->specials.act, ACT_POLYSELF))) {
- count++;
- if (person->desc == NULL) {
- lcount++;
- } else {
- sprintf(buf, "%s %s\n\r", GET_NAME(person), (person->player.title?person->player.title:"(null)"));
- send_to_char(buf, ch);
- }
- }
- }
- } else {
- argument = one_argument(argument,arg);
- if (arg[0] == '-') {
- if (index(arg,'?') != NULL) {
- send_to_char("[-]i=idle l=levels t=title h=hit/mana/move s=stats\n\r",ch);
- send_to_char("[-]d=linkdead g=God o=Mort [1]Mage[2]Cleric[3]War[4]Thief[5]Druid[6]Monk\n\r", ch);
- send_to_char("--------\n\r", ch);
- }
- for (person = character_list; person; person = person->next) {
- if (!IS_NPC(person)) {
- count++;
- if (person->desc == NULL) lcount ++;
- skip = FALSE;
- if (index(arg,'g') != NULL) {
- if (!IS_IMMORTAL(person)) skip = TRUE;
- }
- if (index(arg,'o') != NULL) {
- if (IS_IMMORTAL(person)) skip = TRUE;
- }
- if (index(arg,'1') != NULL) {
- if (!HasClass(person,CLASS_MAGIC_USER)) skip = TRUE;
- }
- if (index(arg,'2') != NULL) {
- if (!HasClass(person,CLASS_CLERIC)) skip = TRUE;
- }
- if (index(arg,'3') != NULL) {
- if (!HasClass(person,CLASS_WARRIOR)) skip = TRUE;
- }
- if (index(arg,'4') != NULL) {
- if (!HasClass(person,CLASS_THIEF)) skip = TRUE;
- }
- if (index(arg,'5') != NULL) {
- if (!HasClass(person,CLASS_DRUID)) skip = TRUE;
- }
- if (index(arg,'6') != NULL) {
- if (!HasClass(person,CLASS_MONK)) skip = TRUE;
- }
- if (!skip) {
- if (person->desc == NULL) {
- if (index(arg,'d') != NULL) {
- sprintf(buf, "[%-12s] ", GET_NAME(person));
- listed++;
- }
- } else {
- if (IS_NPC(person) &&
- IS_SET(person->specials.act, ACT_POLYSELF)) {
- sprintf(buf, "(%-14s) ", GET_NAME(person));
- listed++;
- } else {
- sprintf(buf, "%-14s ", GET_NAME(person));
- listed++;
- }
- }
- if ((person->desc != NULL) || (index(arg,'d') != NULL)) {
- for (l = 1; l <= strlen(arg) ; l++) {
- switch (arg[l]) {
- case 'i': {
- sprintf(tempbuf,"Idle:[%-3d] ",person->specials.timer);
- strcat(buf,tempbuf);
- break;
- }
- case 'l': {
- sprintf(tempbuf,"Level:[%-2d/%-2d/%-2d/%-2d/%-2d/%-2d] ",
- person->player.level[0],person->player.level[1],
- person->player.level[2],person->player.level[3],
- person->player.level[4],person->player.level[5]);
- strcat(buf,tempbuf);
- break;
- }
- case 'h': {
- sprintf(tempbuf,"Hit:[%-3d] Mana:[%-3d] Move:[%-3d] ",GET_HIT(person),GET_MANA(person),GET_MOVE(person));
- strcat(buf,tempbuf);
- break;
- }
- case 's': {
- sprintf(tempbuf,"[S:%-2d I:%-2d W:%-2d C:%-2d D:%-2d] ",GET_STR(person),GET_INT(person),GET_WIS(person),GET_CON(person),GET_DEX(person));
- strcat(buf,tempbuf);
- break;
- }
- case 't': {
- sprintf(tempbuf," %-16s ",(person->player.title?person->player.title:"(null)"));
- strcat(buf,tempbuf);
- break;
- }
- default: {
- break;
- }
- }
- }
- }
- if ((person->desc != NULL) || (index(arg,'d') != NULL)) {
- strcat(buf,"\n\r");
- send_to_char(buf,ch);
- }
- }
- }
- }
- } else {
- /* list gods */
- for (person = character_list; person; person = person->next) {
- if (!IS_NPC(person)) {
- count++;
- if (IS_IMMORTAL(person)) {
- if (person->desc == NULL) {
- lcount++;
- } else {
- sprintf(buf, "%s %s\n\r", GET_NAME(person), (person->player.title?person->player.title:"(null)"));
- send_to_char(buf,ch);
- }
- }
- }
- }
- }
- }
- if (listed == 0) {
- sprintf(buf, "\n\rTotal players / Link dead [%d/%d] (%2.0f%%)\n\r",
- count,lcount,((float)lcount / (int)count) * 100);
- send_to_char(buf, ch);
- } else {
- sprintf(buf, "\n\rTotal players / Link dead [%d/%d] (%2.0f%%) Number Listed: %d\n\r",
- count,lcount,((float)lcount / (int)count) * 100,listed);
- send_to_char(buf, ch);
- }
- }
- }
-
- void do_users(struct char_data *ch, char *argument, int cmd)
- {
- char buf[MAX_STRING_LENGTH], line[200], buf2[255];
- extern const char *connected_types[];
-
- struct descriptor_data *d;
-
- strcpy(buf, "Connections:\n\r------------\n\r");
-
- for (d = descriptor_list; d; d = d->next){
- if (d->character && d->character->player.name){
- if(d->original)
- sprintf(line, "%-16s: ", d->original->player.name);
- else
- sprintf(line, "%-16s: ", d->character->player.name);
- }
- else
- sprintf(line, "UNDEFINED : ");
- if (d->host && *d->host) {
- sprintf(buf2, "%-22s [%s]\n\r", connected_types[d->connected],d->host);
- } else {
- sprintf(buf2, "%-22s [%s]\n\r", connected_types[d->connected],"????");
- }
- strcat(line, buf2);
- strcat(buf, line);
- }
- send_to_char(buf, ch);
- }
-
-
-
- void do_inventory(struct char_data *ch, char *argument, int cmd) {
-
- send_to_char("You are carrying:\n\r", ch);
- list_obj_in_heap(ch->carrying, ch);
- }
-
-
- void do_equipment(struct char_data *ch, char *argument, int cmd) {
- int j,Worn_Index;
- bool found;
- char String[256];
-
- send_to_char("You are using:\n\r", ch);
- found = FALSE;
- for (Worn_Index = j=0; j< MAX_WEAR; j++) {
- if (ch->equipment[j]) {
- Worn_Index++;
- sprintf(String,"[%d] %s",Worn_Index,where[j]);
- send_to_char(String,ch);
- if (CAN_SEE_OBJ(ch,ch->equipment[j])) {
- show_obj_to_char(ch->equipment[j],ch,1);
- found = TRUE;
- } else {
- send_to_char("Something.\n\r",ch);
- found = TRUE;
- }
- }
- }
- if(!found) {
- send_to_char(" Nothing.\n\r", ch);
- }
- }
-
-
- void do_credits(struct char_data *ch, char *argument, int cmd) {
-
- page_string(ch->desc, credits, 0);
- }
-
-
- void do_news(struct char_data *ch, char *argument, int cmd) {
-
- page_string(ch->desc, news, 0);
- }
-
-
- void do_info(struct char_data *ch, char *argument, int cmd) {
-
- page_string(ch->desc, info, 0);
- }
-
-
- void do_wizlist(struct char_data *ch, char *argument, int cmd) {
-
- page_string(ch->desc, wizlist, 0);
- }
-
- int which_number_mobile(struct char_data *ch, struct char_data *mob)
- {
- struct char_data *i;
- char *name;
- int number;
-
- name = fname(mob->player.name);
- for (i=character_list, number=0; i; i=i->next) {
- if (isname(name, i->player.name) && i->in_room != NOWHERE) {
- number++;
- if (i==mob)
- return number;
- }
- }
- return 0;
- }
-
- char *numbered_person(struct char_data *ch, struct char_data *person)
- {
- static char buf[MAX_STRING_LENGTH];
- if (IS_NPC(person) && IS_IMMORTAL(ch)) {
- sprintf(buf, "%d.%s", which_number_mobile(ch, person),
- fname(person->player.name));
- } else {
- strcpy(buf, PERS(person, ch));
- }
- return buf;
- }
-
- void do_where_person(struct char_data *ch, struct char_data *person, struct string_block *sb)
- {
- char buf[MAX_STRING_LENGTH];
-
- sprintf(buf, "%-30s- %s ", PERS(person, ch),
- (person->in_room > -1 ? real_roomp(person->in_room)->name : "Nowhere"));
-
- if (GetMaxLevel(ch) >= LOW_IMMORTAL)
- sprintf(buf+strlen(buf),"[%d]", person->in_room);
-
- strcpy(buf+strlen(buf), "\n\r");
-
- append_to_string_block(sb, buf);
- }
-
- void do_where_object(struct char_data *ch, struct obj_data *obj,
- int recurse, struct string_block *sb)
- {
- char buf[MAX_STRING_LENGTH];
- if (obj->in_room != NOWHERE) { /* object in a room */
- sprintf(buf, "%-30s- %s [%d]\n\r",
- obj->short_description,
- real_roomp(obj->in_room)->name,
- obj->in_room);
- } else if (obj->carried_by != NULL) { /* object carried by monster */
- sprintf(buf, "%-30s- carried by %s\n\r",
- obj->short_description,
- numbered_person(ch, obj->carried_by));
- } else if (obj->equipped_by != NULL) { /* object equipped by monster */
- sprintf(buf, "%-30s- equipped by %s\n\r",
- obj->short_description,
- numbered_person(ch, obj->equipped_by));
- } else if (obj->in_obj) { /* object in object */
- sprintf(buf, "%-30s- in %s\n\r",
- obj->short_description,
- obj->in_obj->short_description);
- } else {
- sprintf(buf, "%-30s- god doesn't even know where...\n\r",
- obj->short_description);
- }
- if (*buf)
- append_to_string_block(sb, buf);
-
- if (recurse) {
- if (obj->in_room != NOWHERE)
- return;
- else if (obj->carried_by != NULL)
- do_where_person(ch, obj->carried_by, sb);
- else if (obj->equipped_by != NULL)
- do_where_person(ch, obj->equipped_by, sb);
- else if (obj->in_obj != NULL)
- do_where_object(ch, obj->in_obj, TRUE, sb);
- }
- }
-
- void do_where(struct char_data *ch, char *argument, int cmd)
- {
- char name[MAX_INPUT_LENGTH], buf[MAX_STRING_LENGTH];
- char *nameonly;
- register struct char_data *i;
- register struct obj_data *k;
- struct descriptor_data *d;
- int number, count;
- struct string_block sb;
-
- only_argument(argument, name);
-
- if (!*name) {
- if (GetMaxLevel(ch) < LOW_IMMORTAL) {
- send_to_char("What are you looking for?\n\r", ch);
- return;
- } else {
- init_string_block(&sb);
- append_to_string_block(&sb, "Players:\n\r--------\n\r");
-
- for (d = descriptor_list; d; d = d->next) {
- if (d->character && (d->connected == CON_PLYNG) && (d->character->in_room != NOWHERE)) {
- if (d->original) /* If switched */
- sprintf(buf, "%-20s - %s [%d] In body of %s\n\r",
- d->original->player.name,
- real_roomp(d->character->in_room)->name,
- d->character->in_room,
- fname(d->character->player.name));
- else
- sprintf(buf, "%-20s - %s [%d]\n\r",
- d->character->player.name,
- real_roomp(d->character->in_room)->name,
- d->character->in_room);
-
- append_to_string_block(&sb, buf);
- }
- }
- page_string_block(&sb,ch);
- destroy_string_block(&sb);
- return;
- }
- }
-
- if (isdigit(*name)) {
- nameonly = name;
- count = number = get_number(&nameonly);
- } else {
- count = number = 0;
- }
-
- *buf = '\0';
-
- init_string_block(&sb);
-
- for (i = character_list; i; i = i->next)
- if (isname(name, i->player.name) && CAN_SEE(ch, i) ) {
- if ((i->in_room != NOWHERE) &&
- ((GetMaxLevel(ch)>=LOW_IMMORTAL) || (real_roomp(i->in_room)->zone ==
- real_roomp(ch->in_room)->zone))) {
- if (number==0 || (--count) == 0) {
- if (number==0) {
- sprintf(buf, "[%2d] ", ++count); /* I love short circuiting :) */
- append_to_string_block(&sb, buf);
- }
- do_where_person(ch, i, &sb);
- *buf = 1;
- if (number!=0)
- break;
- }
- if (GetMaxLevel(ch) < LOW_IMMORTAL)
- break;
- }
- }
-
- /* count = number;*/
-
- if (GetMaxLevel(ch) >= LOW_IMMORTAL ) {
- for (k = object_list; k; k = k->next)
- if (isname(name, k->name) && CAN_SEE_OBJ(ch, k)) {
- if (number==0 || (--count)==0) {
- if (number==0) {
- sprintf(buf, "[%2d] ", ++count);
- append_to_string_block(&sb, buf);
- }
- do_where_object(ch, k, number!=0, &sb);
- *buf = 1;
- if (number!=0)
- break;
- }
- }
- }
-
- if (!*sb.data)
- send_to_char("Couldn't find any such thing.\n\r", ch);
- else
- page_string_block(&sb, ch);
- destroy_string_block(&sb);
- }
-
-
-
-
- void do_levels(struct char_data *ch, char *argument, int cmd)
- {
- int i, RaceMax, class;
- char buf[MAX_STRING_LENGTH];
- char buf2[MAX_STRING_LENGTH];
-
- extern const struct title_type titles[MAX_CLASS][ABS_MAX_LVL];
-
- if (IS_NPC(ch)) {
- send_to_char("You ain't nothin' but a hound-dog.\n\r", ch);
- return;
- }
-
- *buf = '\0';
- /*
- ** get the class
- */
-
- for (;isspace(*argument);argument++);
-
- if (!*argument) {
- send_to_char("You must supply a class!\n\r", ch);
- return;
- }
-
- switch(*argument) {
- case 'C':
- case 'c':
- case 'P':
- case 'p':
- class = CLERIC_LEVEL_IND;
- break;
- case 'F':
- case 'f':
- case 'W':
- case 'w':
- class = WARRIOR_LEVEL_IND;
- break;
- case 'M':
- case 'm':
- class = MAGE_LEVEL_IND;
- break;
- case 'T':
- case 't':
- class = THIEF_LEVEL_IND;
- break;
- case 'D':
- case 'd':
- class = DRUID_LEVEL_IND;
- break;
- case 'K':
- case 'k':
- class = MONK_LEVEL_IND;
- break;
-
- default:
- sprintf(buf, "I don't recognize %s\n\r", argument);
- send_to_char(buf,ch);
- return;
- break;
- }
-
- RaceMax = RacialMax[GET_RACE(ch)][class];
-
- for (i = 1; i <= RaceMax; i++) {
-
- sprintf(buf, "[%2d] %9d-%-9d : %s\n\r", i,
- titles[class][i].exp,
- titles[class][i + 1].exp, (GET_SEX(ch)==SEX_FEMALE?titles[class][i].title_f:titles[class][i].title_m));
-
- send_to_char(buf, ch);
- }
- }
-
-
-
- void do_consider(struct char_data *ch, char *argument, int cmd)
- {
- struct char_data *victim;
- char name[256], buf[256];
- int diff;
-
- only_argument(argument, name);
-
- if (!(victim = get_char_room_vis(ch, name))) {
- send_to_char("Consider killing who?\n\r", ch);
- return;
- }
-
- if (victim == ch) {
- send_to_char("Easy! Very easy indeed!\n\r", ch);
- return;
- }
-
- if (!IS_NPC(victim)) {
- send_to_char("Would you like to borrow a cross and a shovel?\n\r", ch);
- return;
- }
-
- act("$n looks at $N", FALSE, ch, 0, victim, TO_NOTVICT);
- act("$n looks at you", FALSE, ch, 0, victim, TO_VICT);
-
-
- diff = GET_AVE_LEVEL(victim) - GET_AVE_LEVEL(ch);
- if (diff <= -10)
- send_to_char("Too easy to be believed.\n\r", ch);
- else if (diff <= -5)
- send_to_char("Not a problem.\n\r", ch);
- else if (diff <= -3)
- send_to_char("Rather easy.\n\r",ch);
- else if (diff <= -2)
- send_to_char("Easy.\n\r", ch);
- else if (diff <= -1)
- send_to_char("Fairly easy.\n\r", ch);
- else if (diff == 0)
- send_to_char("The perfect match!\n\r", ch);
- else if (diff <= 1)
- send_to_char("You would need some luck!\n\r", ch);
- else if (diff <= 2)
- send_to_char("You would need a lot of luck!\n\r", ch);
- else if (diff <= 3)
- send_to_char("You would need a lot of luck and great equipment!\n\r", ch);
- else if (diff <= 5)
- send_to_char("Do you feel lucky, punk?\n\r", ch);
- else if (diff <= 10)
- send_to_char("Are you crazy? Is that your problem?\n\r", ch);
- else if (diff <= 30)
- send_to_char("You ARE mad!\n\r", ch);
- else
- send_to_char("Why don't I just kill you right now and save you the trouble?\n\r", ch);
-
- if (ch->skills) {
- int skill=0;
- int learn=0;
- int num, num2;
- float fnum;
-
- if (IsAnimal(victim) && ch->skills[SKILL_CONS_ANIMAL].learned) {
- skill = SKILL_CONS_ANIMAL;
- learn = ch->skills[skill].learned;
- act("$N seems to be an animal", FALSE, ch, 0, victim, TO_CHAR);
- }
- if (IsVeggie(victim) && ch->skills[SKILL_CONS_VEGGIE].learned) {
- if (!skill)
- skill = SKILL_CONS_VEGGIE;
- learn = MAX(learn, ch->skills[SKILL_CONS_VEGGIE].learned);
- act("$N seems to be an ambulatory vegetable",
- FALSE, ch, 0, victim, TO_CHAR);
- }
- if (IsDiabolic(victim) && ch->skills[SKILL_CONS_DEMON].learned) {
- if (!skill)
- skill = SKILL_CONS_DEMON;
- learn = MAX(learn, ch->skills[SKILL_CONS_DEMON].learned);
- act("$N seems to be a demon!", FALSE, ch, 0, victim, TO_CHAR);
- }
- if (IsReptile(victim) && ch->skills[SKILL_CONS_REPTILE].learned) {
- if (!skill)
- skill = SKILL_CONS_REPTILE;
- learn = MAX(learn, ch->skills[SKILL_CONS_REPTILE].learned);
- act("$N seems to be a reptilian creature",
- FALSE, ch, 0, victim, TO_CHAR);
- }
- if (IsUndead(victim) && ch->skills[SKILL_CONS_UNDEAD].learned) {
- if (!skill)
- skill = SKILL_CONS_UNDEAD;
- learn = MAX(learn, ch->skills[SKILL_CONS_UNDEAD].learned);
- act("$N seems to be undead", FALSE, ch, 0, victim, TO_CHAR);
- }
-
- if (IsGiantish(victim)&& ch->skills[SKILL_CONS_GIANT].learned) {
- if (!skill)
- skill = SKILL_CONS_GIANT;
- learn = MAX(learn, ch->skills[SKILL_CONS_GIANT].learned);
- act("$N seems to be a giantish creature", FALSE, ch, 0, victim, TO_CHAR);
- }
- if (IsPerson(victim) && ch->skills[SKILL_CONS_PEOPLE].learned) {
- if (!skill)
- skill = SKILL_CONS_PEOPLE;
- learn = MAX(learn, ch->skills[SKILL_CONS_PEOPLE].learned);
- act("$N seems to be a human or demi-human",
- FALSE, ch, 0, victim, TO_CHAR);
- }
- if (IsOther(victim)&& ch->skills[SKILL_CONS_OTHER].learned) {
- if (!skill)
- skill = SKILL_CONS_OTHER;
- learn = MAX(learn, ch->skills[SKILL_CONS_OTHER].learned/2);
- act("$N seems to be a monster you know about",
- FALSE, ch, 0, victim, TO_CHAR);
- }
-
- if (learn > 95) learn = 95;
-
- if (learn == 0) return;
-
- WAIT_STATE(ch, PULSE_VIOLENCE*2);
-
- num = GetApprox(GET_MAX_HIT(victim), learn);
- fnum = ((float)num/(float)GET_MAX_HIT(ch));
-
- sprintf(buf, "Est Max hits are: %s\n\r", DescRatio(fnum));
- send_to_char(buf, ch);
-
- num = GetApprox(GET_AC(victim), learn);
- fnum = ((float)num/(float)GET_AC(ch));
-
- sprintf(buf, "Est. armor class is : %s\n\r", DescRatio(fnum));
- send_to_char(buf, ch);
-
- if (learn > 60) {
- sprintf(buf, "Est. # of attacks: %s\n\r",
- DescAttacks(GetApprox((int)victim->mult_att,
- learn)));
- send_to_char(buf, ch);
- }
- if (learn > 70) {
-
- num = GetApprox((int)victim->specials.damnodice,
- learn);
- num2 = GetApprox((int)victim->specials.damsizedice,
- learn);
-
- fnum = (float)num*(num2/2.0);
- sprintf(buf, "Est. damage of attacks is %s\n\r",
- DescDamage(fnum));
-
- send_to_char(buf, ch);
- }
-
- if (learn > 80) {
-
- num = GetApprox(GET_HITROLL(victim), learn);
- num2 = 21 - CalcThaco(ch);
- if (num2 > 0)
- fnum = ((float)num/(float)num2);
- else
- fnum = 2.0;
-
- sprintf(buf, "Est. Thaco: %s\n\r", DescRatio(fnum));
-
- send_to_char(buf, ch);
-
- num = GetApprox(GET_DAMROLL(victim), learn);
- num2 = GET_DAMROLL(ch);
- fnum = (num/(float)num2);
-
- sprintf(buf, "Est. Dam bonus is: %s\n\r", DescRatio(fnum));
-
- send_to_char(buf, ch);
- }
- }
-
- }
-
- void do_spells(struct char_data *ch, char *argument, int cmd)
- {
- int spl, i;
- char buf[16384];
- extern char *spells[];
- extern int spell_status[];
- extern struct spell_info_type spell_info[MAX_SKILLS];
-
- if (IS_NPC(ch)) {
- send_to_char("You ain't nothin' but a hound-dog.\n\r", ch);
- return;
- }
-
- *buf=0;
-
- for (i = 1, spl = 0; i <= MAX_EXIST_SPELL; i++, spl++) {
- if (GetMaxLevel(ch) > LOW_IMMORTAL ||
- spell_info[i].min_level_cleric < ABS_MAX_LVL)
- sprintf(buf + strlen(buf),
- "[%2d] %-20s Mana: %3d, Cl: %2d, Mu: %2d, Dr: %2d\n\r",
- i, spells[spl],
- spell_info[i].min_usesmana,
- spell_info[i].min_level_cleric,
- spell_info[i].min_level_magic,
- spell_info[i].min_level_druid);
- }
- strcat(buf, "\n\r");
- page_string(ch->desc, buf, 1);
- }
-
- void do_world(struct char_data *ch, char *argument, int cmd)
- {
- static char buf[100];
- long ct, ot;
- char *tmstr, *otmstr;
- extern long Uptime;
- extern long room_count;
- extern long mob_count;
- extern long obj_count;
-
- sprintf(buf, "Base Source: SillyMUD Version %s.\n", VERSION);
- send_to_char(buf, ch);
- ot = Uptime;
- otmstr = asctime(localtime(&ot));
- *(otmstr + strlen(otmstr) - 1) = '\0';
- sprintf(buf, "Start time was: %s (EST)\n\r", otmstr);
- send_to_char(buf, ch);
-
- ct = time(0);
- tmstr = asctime(localtime(&ct));
- *(tmstr + strlen(tmstr) - 1) = '\0';
- sprintf(buf, "Current time is: %s (EST)\n\r", tmstr);
- send_to_char(buf, ch);
- #if HASH
- sprintf(buf, "Total number of rooms in world: %d\n\r", room_db.klistlen);
- #else
- sprintf(buf, "Total number of rooms in world: %d\n\r", room_count);
- #endif
- send_to_char(buf, ch);
- sprintf(buf, "Total number of zones in world: %d\n\r\n\r",
- top_of_zone_table + 1);
- send_to_char(buf, ch);
- sprintf(buf,"Total number of distinct mobiles in world: %d\n\r",
- top_of_mobt + 1);
- send_to_char(buf, ch);
- sprintf(buf,"Total number of distinct objects in world: %d\n\r\n\r",
- top_of_objt + 1);
- send_to_char(buf, ch);
- sprintf(buf,"Total number of registered players: %d\n\r",top_of_p_table + 1);
- send_to_char(buf, ch);
-
- sprintf(buf, "Total number of monsters in game: %d\n\r", mob_count);
- send_to_char(buf, ch);
-
- sprintf(buf, "Total number of objects in game: %d\n\r", obj_count);
- send_to_char(buf, ch);
-
- }
-
- void do_attribute(struct char_data *ch, char *argument, int cmd)
- {
- char buf[MAX_STRING_LENGTH];
- struct affected_type *aff;
-
- struct time_info_data my_age;
-
-
- age2(ch, &my_age);
-
- sprintf(buf,
- "You are %d years and %d months, %d cms, and you weigh %d lbs.\n\r",
- my_age.year, my_age.month,
- ch->player.height,
- ch->player.weight);
-
- send_to_char(buf, ch);
-
- sprintf(buf, "You are carrying %d lbs of equipment.\n\r",
- IS_CARRYING_W(ch));
- send_to_char(buf, ch);
-
- sprintf(buf,"You are %s \n\r",ArmorDesc(ch->points.armor));
- send_to_char(buf,ch);
-
- if ((GetMaxLevel(ch) > 15) || (HasClass(ch, CLASS_MAGIC_USER))) {
- if ((GET_STR(ch)==18) && (HasClass(ch, CLASS_WARRIOR))) {
- sprintf(buf,"You have %d/%d STR, %d INT, %d WIS, %d DEX, %d CON, %d CHR\n\r",
- GET_STR(ch), GET_ADD(ch), GET_INT(ch), GET_WIS(ch), GET_DEX(ch), GET_CON(ch), GET_CHR(ch));
- send_to_char(buf,ch);
- } else {
- sprintf(buf,"You have %d STR %d INT %d WIS %d DEX %d CON %d CHR\n\r",
- GET_STR(ch), GET_INT(ch), GET_WIS(ch), GET_DEX(ch), GET_CON(ch),
- GET_CHR(ch));
- send_to_char(buf,ch);
- }
- }
-
- sprintf(buf, "Your hit bonus and damage bonus are %s and %s respectively.\n\r",
- HitRollDesc(GET_HITROLL(ch)), DamRollDesc(GET_DAMROLL(ch)));
- send_to_char(buf, ch);
-
- /*
- ** by popular demand -- affected stuff
- */
- send_to_char("\n\rAffecting Spells:\n\r--------------\n\r", ch);
- if (ch->affected) {
- for(aff = ch->affected; aff; aff = aff->next) {
- if (aff->type < 170) {
- switch(aff->type) {
- case SKILL_SNEAK:
- case SPELL_POISON:
- case SPELL_CURSE:
- break;
- default:
- sprintf(buf, "Spell : '%s'\n\r",spells[aff->type-1]);
- send_to_char(buf, ch);
- break;
- }
- }
- }
- }
- }
-
- void do_value(struct char_data *ch, char *argument, int cmd)
- {
- char buf[100],buf2[100], name[100];
- struct obj_data *obj=0;
- struct char_data *vict=0;
-
- /* Spell Names */
-
-
- /* For Objects */
- extern char *item_types[];
- extern char *extra_bits[];
- extern char *apply_types[];
- extern char *affected_bits[];
- extern char *affected_bits2[];
- extern char *immunity_names[];
-
-
- if (!HasClass(ch, CLASS_THIEF)) {
- send_to_char("Sorry, you can't do that here", ch);
- return;
- }
-
- argument = one_argument(argument, name);
-
- if ((obj = get_obj_in_list_vis(ch, name, ch->carrying))==0) {
- if ((vict = get_char_room_vis(ch, name))==0) {
- send_to_char("Who, or what are you talking about?\n\r", ch);
- return;
- } else {
- only_argument(argument, name);
- if ((obj = get_obj_in_list_vis(ch, name, vict->carrying))==0) {
- act("You can't see that on $M", FALSE, ch, obj, vict, TO_CHAR);
- act("$n looks you over", FALSE, ch, 0, vict, TO_VICT);
- act("$n looks $N over", FALSE, ch, 0, vict, TO_NOTVICT);
- return;
- }
- }
- }
-
- WAIT_STATE(ch, PULSE_VIOLENCE*2);
-
- if (!SpyCheck(ch)) { /* failed spying check */
- if (obj && vict) {
- act("$n looks at you, and $s eyes linger on $p",
- FALSE, ch, obj, vict, TO_VICT);
- act("$n studies $N",
- FALSE, ch, 0, vict, TO_ROOM);
-
- } else if (obj) {
- act("$n intensely studies $p", FALSE, ch, obj, 0, TO_ROOM);
- } else{
- return;
- }
- }
-
-
- sprintf(buf, "Object: %s. Item type: ", obj->short_description);
- sprinttype(GET_ITEM_TYPE(obj),item_types,buf2);
- strcat(buf,buf2); strcat(buf,"\n\r");
- send_to_char(buf, ch);
-
- if (!ch->skills) return;
-
-
- if (number(1,101) < ch->skills[SKILL_EVALUATE].learned/3) {
- if (obj->obj_flags.bitvector) {
- send_to_char("Item will give you following abilities: ", ch);
- sprintbit((unsigned long)obj->obj_flags.bitvector,affected_bits,buf);
- strcat(buf,"\n\r");
- send_to_char(buf, ch);
- }
- }
-
- if (number(1,101) < ch->skills[SKILL_EVALUATE].learned/2) {
- send_to_char("Item is: ", ch);
- sprintbit((unsigned long) obj->obj_flags.extra_flags,extra_bits,buf);
- strcat(buf,"\n\r");
- send_to_char(buf,ch);
- }
-
- sprintf(buf,"Weight: %d, Value: %d, Rent cost: %d %s\n\r",
- obj->obj_flags.weight,
- GetApprox(obj->obj_flags.cost,
- ch->skills[SKILL_EVALUATE].learned-10),
- GetApprox(obj->obj_flags.cost_per_day,
- ch->skills[SKILL_EVALUATE].learned-10),
- obj->obj_flags.cost_per_day>LIM_ITEM_COST_MIN?"[RARE]":" ");
- send_to_char(buf, ch);
-
- if (ITEM_TYPE(obj) == ITEM_WEAPON) {
- sprintf(buf, "Damage Dice is '%dD%d'\n\r",
- GetApprox(obj->obj_flags.value[1],
- ch->skills[SKILL_EVALUATE].learned-10),
- GetApprox(obj->obj_flags.value[2],
- ch->skills[SKILL_EVALUATE].learned-10));
- send_to_char(buf, ch);
- } else if (ITEM_TYPE(obj) == ITEM_ARMOR) {
-
- sprintf(buf, "AC-apply is %d\n\r",
- GetApprox(obj->obj_flags.value[0],
- ch->skills[SKILL_EVALUATE].learned-10));
- send_to_char(buf, ch);
- }
- }
-
- char *AlignDesc(int a)
- {
- if (a <= -900) {
- return("Really really bad");
- } else if (a <= -500) {
- return("Not nice at all");
- } else if (a <= -351) {
- return("obnoxious as hell");
- } else if (a <= -100) {
- return("just plain annoying");
- } else if (a <= 100) {
- return("You feel balanced");
- } else if (a <= 350) {
- return("Polite");
- } else if (a <= 500) {
- return("Sweet, caring, all that BS.");
- } else if (a <= 900) {
- return("A real goody-goody");
- } else{
- return("So good it makes you sick");
- }
- }
-
-
- char *ArmorDesc(int a)
- {
- if (a >= 90) {
- return("barely armored");
- } else if (a >= 50) {
- return("Lightly armored");
- } else if (a >= 30) {
- return("Medium-armored");
- } else if (a >= 10) {
- return("Fairly well armored");
- } else if (a >= -10) {
- return("Well armored");
- } else if (a >= -30) {
- return("Quite well armored");
- } else if (a >= -50) {
- return("Very well armored");
- } else if (a >= -90) {
- return("Extremeley well armored");
- } else {
- return("armored like a tank");
- }
- }
-
- char *HitRollDesc(int a)
- {
- if (a < -5) {
- return("Quite bad");
- } else if (a < -1) {
- return("Pretty lousy");
- } else if (a <= 1) {
- return("Not Much of one");
- } else if (a < 3) {
- return("Not bad");
- } else if (a < 8) {
- return("Damn good");
- } else {
- return("Very good");
- }
- }
-
- char *DamRollDesc(int a)
- {
- if (a < -5) {
- return("Quite bad");
- } else if (a < -1) {
- return("Pretty lousy");
- } else if (a <= 1) {
- return("Not Much of one");
- } else if (a < 3) {
- return("Not bad");
- } else if (a < 8) {
- return("Damn good");
- } else {
- return("Very good");
- }
- }
-
- char *DescRatio(float f) /* theirs / yours */
- {
- if (f > 1.0) {
- return("More than twice yours");
- } else if (f > .75) {
- return("More than half again greater than yours");
- } else if (f > .6) {
- return("At least a third greater than yours");
- } else if (f > .4) {
- return("About the same as yours");
- } else if (f > .3) {
- return("A little worse than yours");
- } else if (f > .1) {
- return("Much worse than yours");
- } else {
- return("Extremely inferior");
- }
- }
-
- char *DescDamage(float dam)
- {
- if (dam < 1.0) {
- return("Minimal Damage");
- } else if (dam <= 2.0) {
- return("Slight damage");
- } else if (dam <= 4.0) {
- return("A bit of damage");
- } else if (dam <= 10.0) {
- return("A decent amount of damage");
- } else if (dam <= 15.0) {
- return("A lot of damage");
- } else if (dam <= 25.0) {
- return("A whole lot of damage");
- } else if (dam <= 35.0) {
- return("A very large amount");
- } else {
- return("A TON of damage");
- }
- }
-
- char *DescAttacks(float a)
- {
- if (a < 1.0) {
- return("Not many");
- } else if (a < 2.0) {
- return("About average");
- } else if (a < 3.0) {
- return("A few");
- } else if (a < 5.0) {
- return("A lot");
- } else if (a < 9.0) {
- return("Many");
- } else {
- return("A whole bunch");
- }
- }
-
-
- void do_display(struct char_data *ch, char *arg, int cmd)
- {
- int i;
-
- if(IS_NPC(ch))
- return;
-
- i = atoi(arg);
-
- switch(i) {
- case 0: if(ch->term == 0) {
- send_to_char("Display unchanged.\n\r", ch);
- return;
- }
- ch->term = 0;
- ScreenOff(ch);
- send_to_char("Display now turned off.\n\r", ch);
- return;
-
- case 1: if(ch->term == 1) {
- send_to_char("Display unchanged.\n\r", ch);
- return;
- }
- ch->term = VT100;
- InitScreen(ch);
- send_to_char("Display now set to VT100.\n\r", ch);
- return;
-
- default: if(ch->term == VT100) {
- send_to_char("Term type is currently VT100.\n\r", ch);
- return;
- }
- send_to_char("Display is currently OFF.\n\r", ch);
- return;
- }
- }
-
- void ScreenOff(struct char_data *ch)
- {
- char buf[255];
-
- sprintf(buf, VT_MARGSET, 0, ch->size- 1);
- send_to_char(buf, ch);
- send_to_char(VT_HOMECLR, ch);
- }
-
- void do_resize(struct char_data *ch, char *arg, int cmd)
- {
- int i;
-
- if(IS_NPC(ch))
- return;
-
- i = atoi(arg);
-
- if(i < 7) {
- send_to_char("Screen size must be greater than 7.\n\r", ch);
- return;
- }
-
- ch->size = i;
-
- if(ch->term == VT100) {
- ScreenOff(ch);
- InitScreen(ch);
- }
-
- send_to_char("Ok.\n\r", ch);
- return;
- }
-